 /******************************************************************** 
 Implementacion de un RTC con el MSP4305438 de Texas Instruments.
 Archivo: main.c , LAB 4 SISEM, 6/4/2010, sebfer, juliano
*********************************************************************/ 
#include  "msp430x54x.h"
#include "timer.h" 

//-------------------------- comienzo funciones auxiliares -----------------------------
void system_init();    // timerA, registrar la ISR
void system_sleep();   // modo LPM3

/*********************************************************************
Inicializacion del sistema.
Debe inicializar el timerA, registrar la ISR
*********************************************************************/ 
void system_init(){
    P1DIR |= 0x01;    // P1.0 output, Led conectado a P1.0
    TA0CCTL0 = CCIE;  // modo comparador
    TA0CCR0 = 1024;   // umbral=1024 (250ms)
    TA0CTL = TASSEL_1  + MC_1 + TACLR + ID_3; // up_mode, ACLK, clear, /8
    __enable_interrupt(); // GIE=1
    return;
    }

/***********************************************************************
El sistema pasa a un modo inactivo de bajo consumo (LPM3)
**********************************************************************/ 
void system_sleep(){
  __bis_SR_register(LPM3_bits+GIE);             // Enter LPM3
    return;
    }

//-------------------------- fin funciones auxiliaes -----------------------------------------

  timer_t main_actual_time;

main() {

    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
 
    //Inicializacion del timer:
    timer_t init_time_value=(timer_t){0,0,0,0};
    timer_init (init_time_value);
    
    //Inicializacion del sistema:
     system_init();
     system_sleep();

    while(1){
      main_actual_time = timer_actual_time(); // copia cuenta de la hora a variable global
    }
}

#pragma vector=TIMER0_A0_VECTOR   
__interrupt void tic250 (void){ 
    timer_inc();
    P1OUT ^= 0x01;           // Toggle P1.0 (led)
    }
